SpringMVC源码分析:SpringMVC九大组件分析(三) |
您所在的位置:网站首页 › springmvc 尚硅谷 笔记 › SpringMVC源码分析:SpringMVC九大组件分析(三) |
一、概述
SpringMVC九大组件如下图,我将一个个进行介绍。各个组件使用的入口DispatcherServlet.doDispatch是各个组件使用的入口,我们大部分代码都是从这里开始进入的。 下面是MultipartResolver组件具体的使用流程,我们将一一介绍。 DispatcherServlet.checkMultipart是文件上传的入口。 点开该解析方法,会进入接口,但是我要看具体方法需要看实现的子类,那么要去看哪个子类呢?这时候注释的重要性就体现出来了。 注释里面明确给我们指示了这两个类是重要的实现子类,我们选择最上面的类进行具体的分析。 进入该类后parseRequest便是核心的处理方法。 ServletFileUpload.parseRequest方法,之后进入FileUploadBase.parseRequest具体解析了参数,并返回了结果。 CommonsFileUploadSupport.parseFileItems方法具体处理了结果并进行返回。 HandlerMapping使用的方法流程图如下图。它的大致处理逻辑是在Spring初始化的时候把处理器都放入DispatcherServlet.handlerMappings中,之后再遍历获取处理器。
通过DispatcherServlet.getHandler方法进入AbstractHandlerMapping.getHandler方法。 最后通过getHandlerInternal方法到具体的实现类中查看。 AbstractHandlerMethodMapping.getHandlerInternal调用的lookupHandlerMethod是具体的处理方法。 lookupHandlerMethod方法会根据初始化时存储的的路径去匹配对应的处理器。 具体的注册路径的方法来自于AbstractHandlerMethodMapping的内部类MappingRegistry的register方法。 HandlerAdapter具体的请求处理流程如下,HandlerAdapter是具体处理的类,十分重要。
通过mv = ha.handle(processedRequest, response, mappedHandler.getHandler())这段代码,进入到AbstractHandlerMethodAdapter.handle方法。 最后进入RequestMappingHandlerAdapter.handleInternal进行具体处理。 invokeHandlerMethod方法进行了具体处理。 最后进入ServletInvocableHandlerMethod.invokeAndHandle方法。 最后进入InvocableHandlerMethod.invokeForRequest方法完成了最终方法的调用。 ViewResolver的处理流程如下图。 先进入processDispatchResult方法 再通过render进行具体处理。
通过processDispatchResult方法进入processHandlerException进行异常的具体处理。 该方法进入具体的异常解析类进行异常处理。 ThemeResolver,LocaleResolver,RequestToViewNameTranslator,FlashMapManager这四个组件再整个过程中,不起主要作用,因此不做重点介绍,大家可以自行学习。 八、总处理流程![]() 参考文章: 【Spring】MVC:HandlerMapping 初始化及 handler 获取_槑!的博客-CSDN博客 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |